home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Languages / MPW Oberon 2.1168 / OInterfaces / SoundInput.mod < prev    next >
Encoding:
Text File  |  1995-08-10  |  9.8 KB  |  224 lines  |  [TEXT/MPS ]

  1. (*
  2.      File:        SoundInput.mod
  3.  
  4.      Contains:    Sound Input Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Package:    Universal Interfaces 2.0 in “MPW Latest” on ETO #17
  8.  
  9.      Copyright:    © 1984-1995 by Apple Computer, Inc.
  10.                  All rights reserved.
  11.  
  12.      Bugs?:        If you find a problem with this file, use the Apple Bug Reporter
  13.                  stack.  Include the file and version information (from above)
  14.                  in the problem description and send to:
  15.                      Internet:    apple.bugs.applelink.apple.com
  16.                      AppleLink:    APPLE.BUGS
  17.  
  18. *)
  19.  
  20. (*$TAGS-*)
  21. (*$CALLING PASCAL*)
  22. MODULE SoundInput;
  23.  
  24. IMPORT SYSTEM, Types, Dialogs, Sound;
  25.  
  26. (* $PUSH*)
  27. (* $ALIGN MAC68K*)
  28. (* $LibExport+*)
  29.  
  30. CONST
  31.     siDeviceIsConnected*            = 1;                            (*input device is connected and ready for input*)
  32.     siDeviceNotConnected*        = 0;                            (*input device is not connected*)
  33.     siDontKnowIfConnected*        = -1;                            (*can't tell if input device is connected*)
  34.     siReadPermission*            = 0;                            (*permission passed to SPBOpenDevice*)
  35.     siWritePermission*            = 1;                            (*permission passed to SPBOpenDevice*)
  36.  
  37. (*Info Selectors for Sound Input Drivers*)
  38.     siActiveChannels*            = LONG("chac");                        (*active channels*)
  39.     siActiveLevels*                = LONG("lmac");                        (*active meter levels*)
  40.     siAGCOnOff*                    = LONG("agc ");                        (*automatic gain control state*)
  41.     siAsync*                        = LONG("asyn");                        (*asynchronous capability*)
  42.     siChannelAvailable*            = LONG("chav");                        (*number of channels available*)
  43.     siCompressionAvailable*        = LONG("cmav");                        (*compression types available*)
  44.     siCompressionFactor*            = LONG("cmfa");                        (*current compression factor*)
  45.     siCompressionHeader*            = LONG("cmhd");                        (*return compression header*)
  46.     siCompressionNames*            = LONG("cnam");                        (*compression type names available*)
  47.     siCompressionType*            = LONG("comp");                        (*current compression type*)
  48.     siContinuous*                = LONG("cont");                        (*continous recording*)
  49.     siDeviceBufferInfo*            = LONG("dbin");                        (*size of interrupt buffer*)
  50.     siDeviceConnected*            = LONG("dcon");                        (*input device connection status*)
  51.     siDeviceIcon*                = LONG("icon");                        (*input device icon*)
  52.     siDeviceName*                = LONG("name");                        (*input device name*)
  53.     siHardwareBusy*                = LONG("hwbs");                        (*sound hardware is in use*)
  54.     siInputGain*                    = LONG("gain");                        (*input gain*)
  55.     siInputSource*                = LONG("sour");                        (*input source selector*)
  56.     siInputSourceNames*            = LONG("snam");                        (*input source names*)
  57.     siLevelMeterOnOff*            = LONG("lmet");                        (*level meter state*)
  58.     siNumberChannels*            = LONG("chan");                        (*current number of channels*)
  59.     siOptionsDialog*                = LONG("optd");                        (*display options dialog*)
  60.     siPlayThruOnOff*                = LONG("plth");                        (*playthrough state*)
  61.     siRecordingQuality*            = LONG("qual");                        (*recording quality*)
  62.     siSampleRate*                = LONG("srat");                        (*current sample rate*)
  63.     siSampleRateAvailable*        = LONG("srav");                        (*sample rates available*)
  64.     siSampleSize*                = LONG("ssiz");                        (*current sample size*)
  65.     siSampleSizeAvailable*        = LONG("ssav");                        (*sample sizes available*)
  66.     siStereoInputGain*            = LONG("sgai");                        (*stereo input gain*)
  67.     siTwosComplementOnOff*        = LONG("twos");                        (*two's complement state*)
  68.     siVoxRecordInfo*                = LONG("voxr");                        (*VOX record parameters*)
  69.     siVoxStopInfo*                = LONG("voxs");                        (*VOX stop parameters*)
  70.     siInitializeDriver*            = LONG("init");                        (*reserved for internal use only*)
  71.     siCloseDriver*                = LONG("clos");                        (*reserved for internal use only*)
  72.     siPauseRecording*            = LONG("paus");                        (*reserved for internal use only*)
  73.     siUserInterruptProc*            = LONG("user");                        (*reserved for internal use only*)
  74. (*Qualities*)
  75.     siCDQuality*                    = LONG("cd  ");                        (*44.1kHz, stereo, 16 bit*)
  76.     siBestQuality*                = LONG("best");                        (*22kHz, mono, 8 bit*)
  77.     siBetterQuality*                = LONG("betr");                        (*22kHz, mono, MACE 3:1*)
  78.     siGoodQuality*                = LONG("good");
  79.  
  80.     
  81. TYPE
  82.     SPBPtr* = POINTER TO SPB;
  83.  
  84. (*user procedures called by sound input routines*)
  85.     (*
  86.         SIInterruptProcPtr uses register based parameters on the 68k and cannot
  87.         be written in or called from a high-level language without the help of
  88.         mixed mode or assembly glue.
  89.  
  90.         In*:
  91.          => inParamPtr      A0.L
  92.          => dataBuffer      A1.L
  93.          => peakAmplitude    D0.W
  94.          => sampleSize      D1.L
  95.     *)
  96.     SIInterruptProcPtr* = Types.Register68kProcPtr;  (* register PROCEDURE SIInterrupt*(inParamPtr: SPBPtr; dataBuffer: Types.Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT); *)
  97.     SICompletionProcPtr* = (*ΔΔ Types.ProcPtr;*) PROCEDURE (inParamPtr: SPBPtr);
  98.     SIInterruptUPP* = Types.UniversalProcPtr;
  99.     SICompletionUPP* = Types.UniversalProcPtr;
  100.  
  101.     SPB* = RECORD
  102.         inRefNum*:                LONGINT;                                (*reference number of sound input device*)
  103.         count*:                    LONGINT;                                (*number of bytes to record*)
  104.         milliseconds*:            LONGINT;                                (*number of milliseconds to record*)
  105.         bufferLength*:            LONGINT;                                (*length of buffer in bytes*)
  106.         bufferPtr*:                Types.Ptr;                                    (*buffer to store sound data in*)
  107.         completionRoutine*:        SICompletionUPP;                        (*completion routine*)
  108.         interruptRoutine*:        SIInterruptUPP;                            (*interrupt routine*)
  109.         userLong*:                LONGINT;                                (*user-defined field*)
  110.         error*:                    Types.OSErr;                                    (*error*)
  111.         unused1*:                LONGINT;                                (*reserved - must be zero*)
  112.     END;
  113.  
  114.  
  115. PROCEDURE SPBVersion*(): LONGINT (*ΔΔ NumVersion*);
  116.     (*$IF NOT GENERATINGCFM*)
  117.     INLINE PASCAL $203C, $0000, $0014, $A800;
  118.     (*$END*)
  119. PROCEDURE SndRecord*(filterProc: Dialogs.ModalFilterUPP; corner: Types.Point; quality: Types.OSType; VAR sndHandle: Sound.SndListHandle): Types.OSErr;
  120.     (*$IF NOT GENERATINGCFM*)
  121.     INLINE PASCAL $203C, $0804, $0014, $A800;
  122.     (*$END*)
  123. PROCEDURE SndRecordToFile*(filterProc: Dialogs.ModalFilterUPP; corner: Types.Point; quality: Types.OSType; fRefNum: INTEGER): Types.OSErr;
  124.     (*$IF NOT GENERATINGCFM*)
  125.     INLINE PASCAL $203C, $0708, $0014, $A800;
  126.     (*$END*)
  127. PROCEDURE SPBSignInDevice*(deviceRefNum: INTEGER; deviceName: Types.ConstStr255Param): Types.OSErr;
  128.     (*$IF NOT GENERATINGCFM*)
  129.     INLINE PASCAL $203C, $030C, $0014, $A800;
  130.     (*$END*)
  131. PROCEDURE SPBSignOutDevice*(deviceRefNum: INTEGER): Types.OSErr;
  132.     (*$IF NOT GENERATINGCFM*)
  133.     INLINE PASCAL $203C, $0110, $0014, $A800;
  134.     (*$END*)
  135. PROCEDURE SPBGetIndexedDevice*(count: INTEGER; VAR deviceName: Types.Str255; VAR deviceIconHandle: Types.Handle): Types.OSErr;
  136.     (*$IF NOT GENERATINGCFM*)
  137.     INLINE PASCAL $203C, $0514, $0014, $A800;
  138.     (*$END*)
  139. PROCEDURE SPBOpenDevice*(deviceName: Types.ConstStr255Param; permission: INTEGER; VAR inRefNum: LONGINT): Types.OSErr;
  140.     (*$IF NOT GENERATINGCFM*)
  141.     INLINE PASCAL $203C, $0518, $0014, $A800;
  142.     (*$END*)
  143. PROCEDURE SPBCloseDevice*(inRefNum: LONGINT): Types.OSErr;
  144.     (*$IF NOT GENERATINGCFM*)
  145.     INLINE PASCAL $203C, $021C, $0014, $A800;
  146.     (*$END*)
  147. PROCEDURE SPBRecord*(inParamPtr: SPBPtr; asynchFlag: BOOLEAN): Types.OSErr;
  148.     (*$IF NOT GENERATINGCFM*)
  149.     INLINE PASCAL $203C, $0320, $0014, $A800;
  150.     (*$END*)
  151. PROCEDURE SPBRecordToFile*(fRefNum: INTEGER; inParamPtr: SPBPtr; asynchFlag: BOOLEAN): Types.OSErr;
  152.     (*$IF NOT GENERATINGCFM*)
  153.     INLINE PASCAL $203C, $0424, $0014, $A800;
  154.     (*$END*)
  155. PROCEDURE SPBPauseRecording*(inRefNum: LONGINT): Types.OSErr;
  156.     (*$IF NOT GENERATINGCFM*)
  157.     INLINE PASCAL $203C, $0228, $0014, $A800;
  158.     (*$END*)
  159. PROCEDURE SPBResumeRecording*(inRefNum: LONGINT): Types.OSErr;
  160.     (*$IF NOT GENERATINGCFM*)
  161.     INLINE PASCAL $203C, $022C, $0014, $A800;
  162.     (*$END*)
  163. PROCEDURE SPBStopRecording*(inRefNum: LONGINT): Types.OSErr;
  164.     (*$IF NOT GENERATINGCFM*)
  165.     INLINE PASCAL $203C, $0230, $0014, $A800;
  166.     (*$END*)
  167. PROCEDURE SPBGetRecordingStatus*(inRefNum: LONGINT; VAR recordingStatus: INTEGER; VAR meterLevel: INTEGER; VAR totalSamplesToRecord: LONGINT; VAR numberOfSamplesRecorded: LONGINT; VAR totalMsecsToRecord: LONGINT; VAR numberOfMsecsRecorded: LONGINT): Types.OSErr;
  168.     (*$IF NOT GENERATINGCFM*)
  169.     INLINE PASCAL $203C, $0E34, $0014, $A800;
  170.     (*$END*)
  171. PROCEDURE SPBGetDeviceInfo*(inRefNum: LONGINT; infoType: Types.OSType; infoData: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr;
  172.     (*$IF NOT GENERATINGCFM*)
  173.     INLINE PASCAL $203C, $0638, $0014, $A800;
  174.     (*$END*)
  175. PROCEDURE SPBSetDeviceInfo*(inRefNum: LONGINT; infoType: Types.OSType; infoData: (*ΔΔUNIVΔΔ*) Types.Ptr): Types.OSErr;
  176.     (*$IF NOT GENERATINGCFM*)
  177.     INLINE PASCAL $203C, $063C, $0014, $A800;
  178.     (*$END*)
  179. PROCEDURE SPBMillisecondsToBytes*(inRefNum: LONGINT; VAR milliseconds: LONGINT): Types.OSErr;
  180.     (*$IF NOT GENERATINGCFM*)
  181.     INLINE PASCAL $203C, $0440, $0014, $A800;
  182.     (*$END*)
  183. PROCEDURE SPBBytesToMilliseconds*(inRefNum: LONGINT; VAR byteCount: LONGINT): Types.OSErr;
  184.     (*$IF NOT GENERATINGCFM*)
  185.     INLINE PASCAL $203C, $0444, $0014, $A800;
  186.     (*$END*)
  187. PROCEDURE SetupSndHeader*(sndHandle: Sound.SndListHandle; numChannels: INTEGER; sampleRate: Sound.UnsignedFixed; sampleSize: INTEGER; compressionType: Types.OSType; baseNote: INTEGER; numBytes: LONGINT; VAR headerLen: INTEGER): Types.OSErr;
  188.     (*$IF NOT GENERATINGCFM*)
  189.     INLINE PASCAL $203C, $0D48, $0014, $A800;
  190.     (*$END*)
  191. PROCEDURE SetupAIFFHeader*(fRefNum: INTEGER; numChannels: INTEGER; sampleRate: Sound.UnsignedFixed; sampleSize: INTEGER; compressionType: Types.OSType; numBytes: LONGINT; numFrames: LONGINT): Types.OSErr;
  192.     (*$IF NOT GENERATINGCFM*)
  193.     INLINE PASCAL $203C, $0B4C, $0014, $A800;
  194.     (*$END*)
  195. CONST
  196.     uppSIInterruptProcInfo* = $1C579802; (* Register PROCEDURE (4 bytes in A0, 4 bytes in A1, 2 bytes in D0, 4 bytes in D1); *)
  197.     uppSICompletionProcInfo* = $000000C0; (* PROCEDURE (4 byte param); *)
  198.  
  199. PROCEDURE NewSIInterruptProc*(userRoutine: SIInterruptProcPtr): SIInterruptUPP;
  200.     (*$IF NOT GENERATINGCFM *)
  201.     INLINE PASCAL $2E9F;
  202.     (*$END*)
  203.  
  204. PROCEDURE NewSICompletionProc*(userRoutine: SICompletionProcPtr): SICompletionUPP;
  205.     (*$IF NOT GENERATINGCFM *)
  206.     INLINE PASCAL $2E9F;
  207.     (*$END*)
  208.  
  209. PROCEDURE CallSIInterruptProc*(inParamPtr: SPBPtr; dataBuffer: Types.Ptr; peakAmplitude: INTEGER; sampleSize: LONGINT; userRoutine: SIInterruptUPP);
  210.     (*$IF NOT GENERATINGCFM*)
  211.     INLINE PASCAL ; (*••*)
  212.     (*To be implemented*:  Glue to move parameters into registers.*)
  213.     (*$END*)
  214.  
  215. PROCEDURE CallSICompletionProc*(inParamPtr: SPBPtr; userRoutine: SICompletionUPP);
  216.     (*$IF NOT GENERATINGCFM*)
  217.     INLINE PASCAL $205F, $4E90;
  218.     (*$END*)
  219.  
  220. (* $ALIGN RESET*)
  221. (* $POP*)
  222.  
  223.  END SoundInput.
  224.